package com.nablasystems.suag.service;

import java.util.Date;

import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.nablasystems.suag.domain.Curso;
import com.nablasystems.suag.domain.Docente;
import com.nablasystems.suag.domain.ExamenFinal;
import com.nablasystems.suag.domain.InscripcionCursado;
import com.nablasystems.suag.domain.InscripcionExamenFinal;

@Service("docenteService")
@Transactional
public class DocenteService {
	protected static Logger logger = Logger.getLogger("service");

	/* @Resource(name="sessionFactory") */
	@Autowired
	private SessionFactory sessionFactory;
	
	public Docente getDocente(String legajo){
		Session session = sessionFactory.getCurrentSession();
		
		Query query=session.createQuery("FROM Docente d where d.legajo = :legajo");
		query.setParameter("legajo", legajo);
		Docente d=(Docente)query.list().get(0);
		Hibernate.initialize(d.getFinalesTomados());
		return d;
	}
	
	public Curso getCurso(Integer idCurso){
		Curso c=null;
		Session session = sessionFactory.getCurrentSession();
		Query query = session.createQuery("FROM Curso c where c.idCurso = :idCurso");
		query.setParameter("idCurso", idCurso);
		c=(Curso) query.list().get(0);
		Hibernate.initialize(c.getInscriptos());
		Hibernate.initialize(c.getClases());
		return c;
	}
	
	public ExamenFinal getExamenFinal(Integer idCurso){
		ExamenFinal examenFinal=null;
		Session session = sessionFactory.getCurrentSession();
		Query query = session.createQuery("FROM ExamenFinal as ExFinal where ExFinal.idExamenFinal = :idCurso");
		query.setParameter("idCurso", idCurso);
		examenFinal=(ExamenFinal) query.list().get(0);
		Hibernate.initialize(examenFinal.getInscriptos());
		Hibernate.initialize(examenFinal.getClass());
		return examenFinal;
	}
	
	public void cargarNotalFinal(String nota, Integer idInsc){
		InscripcionExamenFinal inscFinal=null;
		Session session = sessionFactory.getCurrentSession();
		Query query = session.createQuery("FROM InscripcionExamenFinal i where i.idInscripcionExamen =:idInsc");
		query.setParameter("idInsc", idInsc);
		inscFinal=(InscripcionExamenFinal)query.list().get(0);
		
		inscFinal.setNota(nota);
		Date fecha = new Date();
		inscFinal.setFechaCargaNota(fecha);
		
		session.save(inscFinal);
	}
	
	public InscripcionCursado cargarParciales(String nota1, String nota2, String nota3, String recu, Integer idInsc){
		InscripcionCursado ic=null;
		Session session = sessionFactory.getCurrentSession();
		Query query = session.createQuery("FROM InscripcionCursado i where i.idInscripcion =:idInsc");
		query.setParameter("idInsc", idInsc);
		ic=(InscripcionCursado)query.list().get(0);
		if((nota1!=null && nota1!="") /*&& (ic.getNota1erParcial()==null || ic.getNota1erParcial().equals(""))*/){
			ic.setNota1erParcial(nota1);
			ic.setFechaCarga1erParcial(new Date());
		}
		if((nota2!=null && nota2!="") /*&& (ic.getNota2erParcial()==null || ic.getNota2erParcial().equals(""))*/){
			ic.setNota2erParcial(nota2);
			ic.setFechaCarga2erParcial(new Date());
		}
		if((nota3!=null && nota3!="") /*&& (ic.getNota3erParcial()==null || ic.getNota3erParcial().equals(""))*/){
			ic.setNota3erParcial(nota3);
			ic.setFechaCarga3erParcial(new Date());
		}
		if((recu!=null && recu!="") /*&& (ic.getNotaRecuperatorio()==null || ic.getNotaRecuperatorio().equals(""))*/){
			ic.setNotaRecuperatorio(recu);
			ic.setFechaCargaRecuperatorio(new Date());
		}
		System.out.println(">>>>>>>>>>nota 1" + ic.getNota1erParcial() +" - "+ nota1);
		System.out.println(">>>>>>>>>>nota 2" + ic.getNota2erParcial() +" - "+ nota2);
		System.out.println(">>>>>>>>>>nota 3" + ic.getNota3erParcial() +" - "+ nota3);
		System.out.println(">>>>>>>>>>nota 4" + ic.getNotaRecuperatorio() +" - "+ recu);
		session.save(ic);
		return ic;
	}
}